home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Everything For A Hacker
/
19990506-[HACK].iso
/
HEXEDIT
/
UTILS
/
80X0393.ARJ
/
COPPER.DOC
< prev
next >
Wrap
Text File
|
1992-09-30
|
2KB
|
75 lines
By Craig Allsop
I figured I might as well give everyone the macros from my source that
display the copper bars. (They were written for Tasm, Ideal mode -
but are easily converted) - I reveal all!
macro waithorz ; DX = 3DAh!
local a,b
a: in al,dx
rcr al,1
jc a
b: in al,dx
rcr al,1
jnc b
endm
macro waitvert
local a,b
a: in al,dx
test al,8
jnz a
b: in al,dx
test al,8
jz b
endm
macro copper ; SI = Colour table, CX = # of Colours
local a ; BL = Palette to change
mov ah,0c9h
mov dl,3
a: mov dl,0c8h
mov al,bl
out dx,al ; Select palette
inc dl
outsb
outsb ; Send first 2 values
lodsb ; Get next one ready
mov bh,al ; and hang onto it
mov dl,0dah
waithorz ; Wait for the horz. retrace
mov dl,ah
mov al,bh
out dx,al ; Send last value (Causes static!)
dec cx
jnz a ; Continue...
endm
To use them, requires a 'waitvert' before using 'copper' to execute it,
and 'waitvert' requires dx = 3dah. Simple really. Eg:
mov si, <address of palette>
mov cx, <number of colours/lines>
mov bl, <palette to change>
mov dx, 3dah
waitvert
copper
You will notice that I send two values before waiting for the retrace,
because the VGA only loads them into a buffer, and only updates the
palette registers when it gets the last value, which is also when you
get the static 'dot' appearing on the screen. Since I'm doing it this
way, on slow machines it works perfectly, and on faster machines you
get static on the right side of the screen, but you can remove the
overscan on the right side to fix that problem.
Regards,
Craig.
If anyone uses the above macros, or modify the above code for suitable
functions in another lanugage, then be my guest,but please give credit
where its due, and mention my name or my alias 'Daemon' - the above
macros must conatin this paragraph in any source and are Public Domain
in all other respects.